iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0
自我挑戰組

金融量化交易系列 第 7

07.使用 Python 打造篩選的前置作業:資料獲取與清理

  • 分享至 

  • xImage
  •  

步驟一:獲取 S&P 500 成分股的歷史股價

我們將從抓取 S&P 500 成分股列表開始,並下載它們的歷史股價。

1. 匯入所需函式庫

%matplotlib inline
import yfinance as yf, bs4 as bs, numpy as np, os, missingno as msno
import requests, pandas as pd, datetime, matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter

2. 抓取股價代碼並下載數據
這段程式碼會從維基百科頁面抓取 S&P 500 的所有成分股代碼,然後使用 yfinance 函式庫下載從 2020 年初到 2023 年中的「調整後收盤價」。


# 提取股票代碼
tickers = [row.findAll('td')[0].text.strip() for row in table.findAll('tr')[1:]]
tickers.append("^GSPC") # 加入 S&P 500 指數本身

# 設定時間範圍並下載數據
start = datetime.datetime(2020, 1, 1)
end = datetime.datetime(2023, 6, 30)
data = yf.download(tickers, start=start, end=end)['Adj Close']

步驟二:數據的視覺化檢視與清理

下載的原始數據通常不完整。因此,分析前必須進行檢查與清理。

1. 視覺化缺失數據
使用 missingno 函式庫可以清楚地看到數據中的缺失情況(白色線條代表缺失)。

msno.matrix(data)

2. 清理數據
以下程式碼將移除數據不完整的公司或日期,確保後續計算的準確性。

# 建立一個數據副本以進行清理
cleaned_data = data.copy()

# 移除在整個時間範圍內所有值都缺失的公司(欄)
cleaned_data.dropna(axis='columns', how='all', inplace=True)

# 移除所有公司數據都缺失的日期(列)
cleaned_data.dropna(axis='index', how='all', inplace=True)

# 移除任何含有至少一個缺失值 (NaN) 的欄位
cleaned_data.dropna(axis='columns', how='any', inplace=True)

# 再次視覺化,確認結果
msno.matrix(cleaned_data)

完成數據清理後,我們就有了一個乾淨的數據集,可以開始應用各種篩選策略。


上一篇
06.股票篩選基礎概念
下一篇
08.股票篩選策略
系列文
金融量化交易23
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言